// API基础配置
const API_BASE_URL = 'http://localhost:9527' // 修改为与learn-fronted项目一致的后端地址

// 请求拦截器
const request = (options) => {
  return new Promise((resolve, reject) => {
    // 设置默认header
    const header = {
      ...options.header
    }
    
    // 如果没有指定Content-Type，默认使用application/json
    if (!header['Content-Type']) {
      header['Content-Type'] = 'application/json'
    }
    
    // 只有在非登录请求时才添加Authorization头
    if (!options.url.includes('/user/oauth2/login') && !options.url.includes('/user/oauth2/bind')) {
      const token = uni.getStorageSync('accessToken')
      if (token) {
        header['Authorization'] = ` ${token}`
      }
    }
  
    const requestUrl = `${API_BASE_URL}${options.url}`
    console.log('=== API请求调试信息 ===')
    console.log('API基础地址:', API_BASE_URL)
    console.log('请求路径:', options.url)
    console.log('完整请求URL:', requestUrl)
    console.log('请求方法:', options.method || 'GET')
    console.log('请求数据:', options.data)
    console.log('请求参数:', options.params)
    console.log('请求头:', header)
    console.log('========================')
    
    // 处理params参数，将其转换为URL查询参数
    let finalUrl = requestUrl
    if (options.params && Object.keys(options.params).length > 0) {
      const queryString = Object.keys(options.params)
        .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(options.params[key])}`)
        .join('&')
      finalUrl = `${requestUrl}?${queryString}`
      console.log('最终请求URL:', finalUrl)
    }
    
    uni.request({
      url: finalUrl,
      method: options.method || 'GET',
      data: options.data,
      header: header,
      success: (res) => {
        console.log('响应成功:', res)
        if (res.statusCode === 200) {
          // 检查业务状态码
          if (res.data && res.data.code === '00000') {
            resolve(res.data)
          } else {
            console.error('业务状态码错误:', res.data?.code, res.data?.msg)
            reject(new Error(res.data?.msg || '请求失败'))
          }
        } else {
          console.error('响应状态码错误:', res.statusCode)
          reject(new Error(`请求失败: ${res.statusCode}`))
        }
      },
      fail: (err) => {
        console.error('请求失败:', err)
        
        // 只有在网络完全不可用或后端服务完全不可用时才使用模拟数据
        // 优先尝试真实的后端接口
        if (err.errMsg && err.errMsg.includes('timeout')) {
          console.log('请求超时，可能是网络问题')
          reject(new Error('请求超时，请检查网络连接'))
        } else if (err.errMsg && err.errMsg.includes('fail')) {
          console.log('网络请求失败，可能是后端服务不可用')
          reject(new Error('网络请求失败，请检查后端服务状态'))
        } else {
          reject(err)
        }
      }
    })
  })
}

// 登录相关API
export const authAPI = {
  // 第三方登录 - 根据您的后端接口调整
  login: (provider, code) => {
    return request({
      url: '/user/oauth2/login',
      method: 'POST',
      params: {
        provider: provider,
        code: code
      },
      header: {
        'Content-Type': 'application/x-www-form-urlencoded' // 使用表单格式，与您的后端@RequestParam匹配
      }
    })
  },
  
  // 绑定账号
  bind: (bindData) => {
    return request({
      url: '/user/oauth2/bind',
      method: 'POST',
      data: bindData,
      header: {
        'Content-Type': 'application/json'
      }
    })
  },
  
  // 获取用户信息 - 参考learn-fronted的实现
  getUserInfo: () => {
    return request({
      url: '/user/sysUser/getUser',
      method: 'GET'
    })
  },
  
  // 更新用户信息 - 参考learn-fronted的实现
  updateUserInfo: (userData) => {
    return request({
      url: '/user/sysUser/updateUser',
      method: 'PUT',
      data: userData
    })
  }
}

// 用户相关API
export const userAPI = {
  // 测试API连接
  testConnection: () => {
    return request({
      url: '/user/sysUser/getUser', // 使用一个简单的接口来测试连接
      method: 'GET'
    })
  },
  
  // 获取用户信息 - 参考learn-fronted的实现
  getUserInfo: () => {
    return request({
      url: '/user/sysUser/getUser',
      method: 'GET'
    })
  },
  
  // 获取用户统计信息 - 暂时使用默认值，因为后端没有此接口
  getStats: () => {
    return Promise.resolve({
      code: '00000',
      data: {
        following: 0,
        followers: 0,
        works: 0,
        points: 0
      }
    })
  },
  
  // 获取订单统计 - 暂时使用默认值，因为后端没有此接口
  getOrderStats: () => {
    return Promise.resolve({
      code: '00000',
      data: {
        unpaid: 0,
        unshipped: 0,
        unreceived: 0,
        unrated: 0
      }
    })
  }
}

// 通用请求方法
export const http = {
  get: (url, params = {}) => {
    return request({
      url: url,
      method: 'GET',
      data: params
    })
  },
  
  post: (url, data = {}) => {
    return request({
      url: url,
      method: 'POST',
      data: data
    })
  },
  
  put: (url, data = {}) => {
    return request({
      url: url,
      method: 'PUT',
      data: data
    })
  },
  
  delete: (url) => {
    return request({
      url: url,
      method: 'DELETE'
    })
  }
}

export default {
  authAPI,
  userAPI,
  http
}

